package com.jy.oms.framework.asyn.task.annotation;

import com.jy.oms.framework.asyn.task.constants.TaskConstants;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 任务策略，当@Task在method上定义时，可结合使用定义任务执行策略；同ITaskStrategyInitializing
 *
 * @author liuquan
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface TaskStrategy {

    /**
     * 分组策略时，需定义分组标识
     */
    String groupTaskGroup() default TaskConstants.DEFAULT_GROUP_CODE;

    /**
     * 任务组核心线程数
     */
    int taskGroupCoreThreadNum() default -1;

    /**
     * 任务DB队列名;
     * 任务队列数据库表为为sys_task_queue_[taskGroupDbQueueName]
     */
    String taskGroupDbQueueName() default "";

    /**
     * 限速执行策略
     */
    TaskLimiterStrategy limiterStrategy() default @TaskLimiterStrategy;

    /**
     * 排他执行策略
     */
    TaskExclusiveStrategy exclusiveStrategy() default @TaskExclusiveStrategy;
}
